home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6r.s < prev    next >
Text File  |  1994-07-28  |  16KB  |  487 lines

  1.  
  2. ; Lezione6r.s    RIEPILOGO DELLA LEZIONE 6 - VARIE ROUTINES DELLA LEZIONE
  3. ;        COMBINATE INSIEME + ROUTINE MUSICALE
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. Inizio:
  8.     move.l    4.w,a6        ; Execbase
  9.     jsr    -$78(a6)    ; Disable
  10.     lea    GfxName(PC),a1    ; Nome lib
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  15.  
  16. ;     PUNTIAMO IL NOSTRO BITPLANE
  17.  
  18.     MOVE.L    #BITPLANETESTO-2,d0
  19.     LEA    BPLPOINTERS,A1
  20.     move.w    d0,6(a1)
  21.     swap    d0
  22.     move.w    d0,2(a1)
  23.  
  24.     MOVE.L    #BITPLANEGRIGLIA-2,d0
  25.     LEA    BPLPOINTERS2,A1
  26.     move.w    d0,6(a1)
  27.     swap    d0
  28.     move.w    d0,2(a1)
  29.  
  30.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  31.     move.w    d0,$dff088        ; Facciamo partire la COP
  32.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  33.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  34.  
  35.     bsr.w    griglia3    ; Fai la scacchiera su BITPLANEGRIGLIA
  36.  
  37.     bsr.w    mt_init        ; Inizializza routine musicale
  38.  
  39. mouse:
  40.     cmpi.b    #$ff,$dff006    ; Linea 255?
  41.     bne.s    mouse
  42.  
  43.     bsr.s    PrintCarattere    ; Stampa un carattere alla volta
  44.     bsr.w    MEGAScrolla    ; Esegue lo scroll dello schermo largo 640
  45.                 ; pixel su uno di 320
  46.     bsr.w    Rimbalzo    ; Fa rimbalzare il bitplane TESTO
  47.     bsr.w    mt_music    ; Suona la musica
  48.  
  49. Aspetta:
  50.     cmpi.b    #$ff,$dff006    ; linea 255?
  51.     beq.s    Aspetta
  52.  
  53.     btst    #6,$bfe001    ; mouse premuto?
  54.     bne.s    mouse
  55.  
  56.     bsr.w    mt_end        ; Termina la routine musicale
  57.  
  58.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  59.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  60.  
  61.     move.l    4.w,a6
  62.     jsr    -$7e(a6)    ; Enable
  63.     move.l    gfxbase(PC),a1
  64.     jsr    -$19e(a6)    ; Closelibrary
  65.     rts
  66.  
  67. ;    Dati
  68.  
  69. GfxName:
  70.     dc.b    "graphics.library",0,0
  71.  
  72. GfxBase:
  73.     dc.l    0
  74.  
  75. OldCop:
  76.     dc.l    0
  77.  
  78. ;************************************************************************
  79. ;*    Stampa un carattere alla volta su schermo largo 640 pixel    *
  80. ;************************************************************************
  81.  
  82. PRINTcarattere:
  83.     MOVE.L    PuntaTESTO(PC),A0 ; Indirizzo del testo da stampare in a0
  84.     MOVEQ    #0,D2        ; Pulisci d2
  85.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  86.     CMP.B    #$ff,d2        ; Segnale di fine testo? ($FF)
  87.     beq.s    FineTesto    ; Se si, esci senza stampare
  88.     TST.B    d2        ; Segnale di fine riga? ($00)
  89.     bne.s    NonFineRiga    ; Se no, non andare a capo
  90.  
  91.     ADD.L    #80*7,PuntaBITPLANE    ; ANDIAMO A CAPO
  92.     ADDQ.L    #1,PuntaTesto        ; primo carattere riga dopo
  93.                     ; (saltiamo lo ZERO)
  94.     move.b    (a0)+,d2        ; primo carattere della riga dopo
  95.                     ; (saltiamo lo ZERO)
  96.  
  97. NonFineRiga:
  98.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  99.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  100.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  101.                 ; DELL'ASTERISCO ($21), in $01...
  102.     MULU.W    #8,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  103.                 ; essendo i caratteri alti 8 pixel
  104.     MOVE.L    D2,A2
  105.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  106.  
  107.     MOVE.L    PuntaBITPLANE(PC),A3 ; Indir. del bitplane destinazione in a3
  108.  
  109.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  110.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  111.     MOVE.B    (A2)+,80(A3)    ; stampa LA LINEA 2  " "
  112.     MOVE.B    (A2)+,80*2(A3)    ; stampa LA LINEA 3  " "
  113.     MOVE.B    (A2)+,80*3(A3)    ; stampa LA LINEA 4  " "
  114.     MOVE.B    (A2)+,80*4(A3)    ; stampa LA LINEA 5  " "
  115.     MOVE.B    (A2)+,80*5(A3)    ; stampa LA LINEA 6  " "
  116.     MOVE.B    (A2)+,80*6(A3)    ; stampa LA LINEA 7  " "
  117.     MOVE.B    (A2)+,80*7(A3)    ; stampa LA LINEA 8  " "
  118.  
  119.     ADDQ.L    #1,PuntaBitplane ; avanziamo di 8 bit (PROSSIMO CARATTERE)
  120.     ADDQ.L    #1,PuntaTesto    ; prossimo carattere da stampare
  121.  
  122. FineTesto:
  123.     RTS
  124.  
  125.  
  126. PuntaTesto:
  127.     dc.l    TESTO
  128.  
  129. PuntaBitplane:
  130.     dc.l    BITPLANETESTO
  131.  
  132. ;    $00 per "fine linea" - $FF per "fine testo"
  133.  
  134.         ; numero caratteri per linea: 80
  135. TESTO:
  136.     dc.b    "          QUESTA DEMO RIASSUME LA LEZION"
  137.     dc.b    "E 6 IN QUANTO CONTIENE SIA LA           ",0
  138.     dc.b    "                                        "
  139.     dc.b    "                                        ",0
  140.     dc.b    "          ROUTINE DI STAMPA DEI CARATTER"
  141.     dc.b    "I DI 8x8 PIXEL, SIA LO SCROLL           ",0
  142.     dc.b    "                                        "
  143.     dc.b    "                                        ",0
  144.     dc.b    "          ORIZZONTALE TRAMITE IL BPLCON1"
  145.     dc.b    " ($dff102) E I BPLPOINTERS, SIA         ",0
  146.     dc.b    "                                        "
  147.     dc.b    "                                        ",0
  148.     dc.b    "          L'USO DI UNA TABELLA DI VALORI"
  149.     dc.b    " PREDEFINITI PER IL MOVIMENTO           ",0
  150.     dc.b    "                                        "
  151.     dc.b    "                                        ",0
  152.     dc.b    "          OSCILLATORIO VERTICALE DI QUES"
  153.     dc.b    "TO TESTO.                               ",0
  154.     dc.b    "                                        "
  155.     dc.b    "                                        ",0
  156.     dc.b    "          IL PLAYFIELD DOVE VIENE STAMPA"
  157.     dc.b    "TO QUESTO TESTO HA LE DIMENSIONI        ",0
  158.     dc.b    "                                        "
  159.     dc.b    "                                        ",0
  160.     dc.b    "          DI UNO SCHERMO HIRES, OSSIA 64"
  161.     dc.b    "0 PIXEL DI LARGHEZZA PER 256 DI         ",0
  162.     dc.b    "                                        "
  163.     dc.b    "                                        ",0
  164.     dc.b    "          ALTEZZA, E VIENE SPOSTATO SIA "
  165.     dc.b    "ORIZZONTALMENTE, SIA VERTICALMENTE,     ",0
  166.     dc.b    "                                        "
  167.     dc.b    "                                        ",0
  168.     dc.b    "          MENTRE IL BITPLANE CHE CONTIEN"
  169.     dc.b    "E LA GRIGLIA VIENE SPOSTATO SOLO        ",0
  170.     dc.b    "                                        "
  171.     dc.b    "                                        ",0
  172.     dc.b    "          ORIZZONTALMENTE. LO SCROLL VER"
  173.     dc.b    "TICALE, ESSENDO DETERMINATO DA UNA      ",0
  174.     dc.b    "                                        "
  175.     dc.b    "                                        ",0
  176.     dc.b    "          TABELLA, HA VELOCITA' VARIABIL"
  177.     dc.b    "E, MENTRE LO SCROLL ORIZZONTALE E'      ",0
  178.     dc.b    "                                        "
  179.     dc.b    "                                        ",0
  180.     dc.b    "          SEMPRE DI 2 PIXEL PER FOTOGRAM"
  181.     dc.b    "MA.                                     ",$FF
  182.  
  183.  
  184.  
  185.     EVEN
  186.  
  187. ;************************************************************************
  188. ;*   Esegue uno scroll di 320 pixel a destra e sinistra (Lezione6o.s)    *
  189. ;************************************************************************
  190.  
  191. ; NOTA: Modificata in modo da agire anche sul bitplane della GRIGLIA
  192.  
  193. MEGAScrolla:
  194.     addq.w    #1,ContaVolte    ; Segnamo una esecuzione in piu'
  195.     cmp.w    #160,ContaVolte    ; Siamo a 160? Allora abbiamo scrollato 320
  196.                 ; pixel, dato che eseguiamo 2 volte la routine
  197.                 ; DESTRA o SINISTRA ogni FRAME per andare al
  198.                 ; doppio della velocita'
  199.     bne.S    MuoviAncora    ; Se non ancora, sposta ancora
  200.     BCHG.B    #1,DestSinFlag    ; Se siamo a 160, invece, cambia direzione
  201.     CLR.w    ContaVolte    ; di scorrimento e azzera "ContaVolte"
  202.     rts
  203.  
  204. MuoviAncora:
  205.     BTST    #1,DestSinFlag    ; Dobbiamo andare a destra o a sinistra?
  206.     BEQ.S    VaiSinistra
  207.     bsr.s    Destra        ; Scorri un pixel verso destra
  208.     bsr.s    Destra        ; Scorri un pixel verso destra
  209.                 ; (2 pixel per frame, dunque doppia velocita')
  210.     rts
  211.  
  212. VaiSinistra:
  213.     bsr.s    Sinistra    ; Scorri un pixel verso sinistra
  214.     bsr.s    Sinistra    ; Scorri un pixel verso sinistra
  215.                 ; (2 pixel per frame, dunque doppia velocita')
  216.     rts
  217.  
  218. ; Questa word conta quante volte ci siamo spostati a Destra o a Sinistra
  219.  
  220. ContaVolte:
  221.     DC.W    0
  222.  
  223. ; Quando il bit 1 di DestSinFlag e' a ZERO la routine scorre a Sinistra, se
  224. ; e' ad 1 scorre a Destra.
  225.  
  226. DestSinFlag:
  227.     DC.W    0
  228.  
  229. ; Questa routine fa scorrere a destra un bitplane agendo sul BPLCON1 e sui
  230. ; puntatori ai bitplanes in copperlist. MIOBPCON1 e' il byte del BPLCON1.
  231.  
  232. Destra:
  233.     CMP.B    #$ff,MIOBPCON1    ; siamo arrivati al massimo scorrimento? (15)
  234.     BNE.s    CON1ADDA    ; se non ancora, scorri in avanti di 1
  235.                 ; con il BPLCON1
  236.  
  237.     LEA    BPLPOINTERS,A1    ; Con queste 4 istruzioni preleviamo dalla
  238.     move.w    2(a1),d0    ; copperlist l'indirizzo dove sta puntando
  239.     swap    d0        ; attualmente il $dff0e0 e lo poiniamo in d0
  240.     move.w    6(a1),d0
  241.  
  242.     LEA    BPLPOINTERS2,A2    ; Con queste 4 istruzioni preleviamo dalla
  243.     move.w    2(a2),d1    ; copperlist l'indirizzo dove sta puntando
  244.     swap    d1        ; attualmente il $dff0e4 e lo poiniamo in d0
  245.     move.w    6(a2),d1
  246.  
  247.     subq.l    #2,d0        ; punta 16 bit piu' indietro ( la PIC scorre
  248.                 ; verso destra di 16 pixel) - TESTO
  249.  
  250.     subq.l    #2,d1        ; punta 16 bit piu' indietro ( la PIC scorre
  251.                 ; verso destra di 16 pixel) - GRIGLIA
  252.  
  253.     clr.b    MIOBPCON1    ; azzera lo scroll hardware BPLCON1 ($dff102)
  254.                 ; infatti abbiamo "saltato" 16 pixel con il
  255.                 ; bitplane pointer, ora dobbiamo ricominciare
  256.                 ; da zero con il $dff102 per scattare a
  257.                 ; destra di un pixel alla volta.
  258.  
  259. ;    Puntiamo il bitplane TESTO
  260.  
  261.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  262.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  263.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  264.  
  265. ;    Puntiamo il bitplane GRIGLIA
  266.  
  267.     move.w    d1,6(a2)    ; copia la word BASSA dell'indirizzo del plane
  268.     swap    d1        ; scambia le 2 word di d0 (es: 1234 > 3412)
  269.     move.w    d1,2(a2)    ; copia la word ALTA dell'indirizzo del plane
  270.  
  271.     rts
  272.  
  273. CON1ADDA:
  274.     add.b    #$11,MIOBPCON1    ; scorri in avanti di 1 pixel
  275.     rts
  276.  
  277. ;    Routine che sposta a sinistra in modo analogo:
  278.  
  279. Sinistra:
  280.     TST.B    MIOBPCON1    ; siamo arrivati al minimo scorrimento? (00)
  281.     BNE.s    CON1SUBBA    ; se non ancora, scorri indietro di 1
  282.                 ; con il BPLCON1
  283.  
  284.     LEA    BPLPOINTERS,A1    ; Con queste 4 istruzioni preleviamo dalla
  285.     move.w    2(a1),d0    ; copperlist l'indirizzo dove sta puntando
  286.     swap    d0        ; attualmente il $dff0e0 e lo poiniamo in d0
  287.     move.w    6(a1),d0
  288.  
  289.     LEA    BPLPOINTERS2,A2    ; Con queste 4 istruzioni preleviamo dalla
  290.     move.w    2(a2),d1    ; copperlist l'indirizzo dove sta puntando
  291.     swap    d1        ; attualmente il $dff0e4 e lo poiniamo in d0
  292.     move.w    6(a2),d1
  293.  
  294.     addq.l    #2,d0        ; punta 16 bit piu' avanti ( la PIC scorre
  295.                 ; verso sinistra di 16 pixel) - TESTO
  296.  
  297.     addq.l    #2,d1        ; punta 16 bit piu' avanti ( la PIC scorre
  298.                 ; verso sinistra di 16 pixel) - GRIGLIA
  299.  
  300.     move.b    #$FF,MIOBPCON1    ; scroll hardware a 15 - BPLCON1 ($dff102)
  301.  
  302. ;    Puntiamo il bitplane TESTO
  303.  
  304.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  305.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  306.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  307.  
  308. ;    Puntiamo il bitplane GRIGLIA
  309.  
  310.     move.w    d1,6(a2)    ; copia la word BASSA dell'indirizzo del plane
  311.     swap    d1        ; scambia le 2 word di d0 (es: 1234 > 3412)
  312.     move.w    d1,2(a2)    ; copia la word ALTA dell'indirizzo del plane
  313.  
  314.     rts
  315.  
  316. CON1SUBBA:
  317.     sub.b    #$11,MIOBPCON1    ; scorri indietro di 1 pixel
  318.     rts
  319.  
  320.  
  321. ;************************************************************************
  322. ;*   Fa oscillare SU/GIU tramite l'uso di una tabella (Lezione6m.s)    *
  323. ;************************************************************************
  324.  
  325. Rimbalzo:
  326.     LEA    BPLPOINTERS,A1    ; Con queste 4 istruzioni preleviamo dalla
  327.     move.w    2(a1),d0    ; copperlist l'indirizzo dove sta puntando
  328.     swap    d0        ; attualmente il $dff0e0 e lo poiniamo in d0
  329.     move.w    6(a1),d0
  330.  
  331.     ADDQ.L    #4,RIMTABPOINT    ; Fai puntare alla longword successiva
  332.     MOVE.L    RIMTABPOINT(PC),A0 ; indirizzo contenuto in long RIMTABPOINT
  333.                    ; copiato in a0
  334.     CMP.L    #FINERIMBALZTAB-4,A0 ; Siamo all'ultima longword della TAB?
  335.     BNE.S    NOBSTART2        ; non ancora? allora continua
  336.     MOVE.L    #RIMBALZTAB-4,RIMTABPOINT ; Riparti a puntare dalla prima long
  337. NOBSTART2:
  338.     MOVE.l    (A0),d1        ; copia la long dalla tabella in d1
  339.  
  340.     sub.l    d1,d0        ; sottraiamo il valore attualmente preso dalla
  341.                 ; tabella, facendo scorrere la figura SU o GIU.
  342.  
  343.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  344.     MOVEQ    #1,D1        ; numero di bitplanes -1 (qua sono 3)
  345. POINTBP2:
  346.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  347.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  348.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  349.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  350.     ADD.L    #80*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  351.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  352. ;    dbra    d1,POINTBP2    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  353.     rts
  354.  
  355.  
  356. RIMTABPOINT:            ; Questa longword "PUNTA" a RIMBALZTAB, ossia
  357.     dc.l    RIMBALZTAB-4    ; contiene l'indirizzo di RIMBALZTAB. Terra'
  358.                 ; l'indirizzo del'ultima long "letta" dentro
  359.                 ; la tabella. (qua inizia da RIMORTAB-4 in
  360.                 ; quanto Lampeggio inizia con un ADDQ.L #4,C..
  361.                 ; serve per "bilanciare" la prima istruzione.
  362.  
  363. ;    La tabella con i valori "precalcolati" del rimbalzo
  364.  
  365. RIMBALZTAB:
  366.     dc.l    0,0,80,80,80,80,80,80,80,80,80             ; in cima
  367.     dc.l    80,80,2*80,2*80
  368.     dc.l    2*80,2*80,2*80,2*80,2*80            ; acceleriamo
  369.     dc.l    3*80,3*80,3*80,3*80,3*80
  370.     dc.l    3*80,3*80,3*80,3*80,3*80
  371.     dc.l    2*80,2*80,2*80,2*80,2*80            ; deceleriamo
  372.     dc.l    2*80,2*80,80,80
  373.     dc.l    80,80,80,80,80,80,80,80,80,0,0,0,0,0,0,0    ; in fondo
  374.     dc.l    -80,-80,-80,-80,-80,-80,-80,-80,-80
  375.     dc.l    -80,-80,-2*80,-2*80
  376.     dc.l    -2*80,-2*80,-2*80,-2*80,-2*80
  377.     dc.l    -3*80,-3*80,-3*80,-3*80,-3*80            ; acceleriamo
  378.     dc.l    -3*80,-3*80,-3*80,-3*80,-3*80
  379.     dc.l    -2*80,-2*80,-2*80,-2*80,-2*80            ; deceleriamo
  380.     dc.l    -2*80,-2*80,-80,-80
  381.     dc.l    -80,-80,-80,-80,-80,-80,-80,-80,-80,0,0,0,0,0    ; in cima
  382. FINERIMBALZTAB:
  383.  
  384. ;************************************************************************
  385. ;*  fa una scacchiera con quadrati di 16 pixel di lato (Lezione6q.s)    *
  386. ;************************************************************************
  387.  
  388. GRIGLIA3:
  389.     LEA    BITPLANEGRIGLIA,a0    ; Indirizzo bitplane destinazione
  390.  
  391.     MOVEQ    #8-1,d0        ; 8 coppie di quadretti alti 16 pixel
  392.                 ; 8*2*16=256 riempimento completo dello schermo
  393. FaiCoppia3:
  394.     move.l    #(20*16)-1,d1    ; 20 longwords per riempire 1 linea (640 pixel)
  395.                 ; 16 linee da riempire
  396. FaiUNO3:
  397.     move.l    #%11111111111111110000000000000000,(a0)+ 
  398.                     ; lunghezza quadretto ad 1 = 16 pixel
  399.                     ; quadretto azzerato = 16 pixel
  400.     dbra    d1,FaiUNO3        ; fai 16 linee #.#.#.#.#.#.#.#.#.#
  401.  
  402.     move.l    #(20*16)-1,d1    ; 20 lingwords per riempire 1 linea (640 pixel)
  403.                 ; 16 linee da riempire
  404. FaiALTRO3:
  405.     move.l    #%00000000000000001111111111111111,(a0)+
  406.                     ; lunghezza quadretto azzerato = 16
  407.                     ; quadretto ad 1 = 16 pixel
  408.     dbra    d1,FaiAltro3        ; fai 8 linee .#.#.#.#.#.#.#.#.#.
  409.  
  410.     DBRA    d0,FaiCoppia3         ; fai 8 coppie di quadretti
  411.                      ; #.#.#.#.#.#.#.#.#.#
  412.     rts                 ; .#.#.#.#.#.#.#.#.#.
  413.  
  414. ; **************************************************************************
  415. ; *        ROUTINE CHE SUONA MUSICHE SOUNDTRACKER/PROTRACKER       *
  416. ; **************************************************************************
  417.  
  418.     include    "music.s"    ; routine 100% funzionante su tutti gli Amiga
  419.  
  420.  
  421.     SECTION    GRAPHIC,DATA_C
  422.  
  423. COPPERLIST:
  424.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  425.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  426.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  427.     dc.w    $13e,0
  428.  
  429.     dc.w    $8e,$2c81    ; DiwStrt
  430.     dc.w    $90,$2cc1    ; DiwStop
  431.     dc.w    $92,$30        ; DdfStart (modificato per SCROLL)
  432.     dc.w    $94,$d0        ; DdfStop
  433.     dc.w    $102        ; BplCon1
  434.     dc.b    0        ; byte "alto" inutilizzato del $dff102
  435. MIOBPCON1:
  436.     dc.b    0        ; byte "basso" utilizzato del $dff102
  437.     dc.w    $104,0        ; BplCon2
  438.     dc.w    $108,40-2    ; Bpl1Mod (40 per la figura larga 640, il -2
  439.     dc.w    $10a,40-2    ; Bpl2Mod (per bilanciare il DDFSTART
  440.  
  441.             ; 5432109876543210
  442.     dc.w    $100,%0010001000000000    ; bit 12 - 1 bitplane LOWRES
  443.  
  444. BPLPOINTERS:
  445.     dc.w $e0,0,$e2,0    ; primo bitplane
  446. BPLPOINTERS2:
  447.     dc.w $e4,0,$e6,0    ; secondo bitplane
  448.  
  449.     dc.w    $180,$113    ; color0 - QUADRATO SCURO
  450.     dc.w    $182,$bb5    ; color1 - SCRITTE+quadrato scuro
  451.     dc.w    $184,$225    ; color2 - QUADRATO CHIARO
  452.     dc.w    $186,$bb5    ; color3 - SCRITTE+quadrato chiaro
  453.  
  454.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  455.  
  456.  
  457. ;    Il FONT caratteri 8x8
  458.  
  459. FONT:
  460.     incbin    "metal.fnt"
  461. ;    incbin    "normal.fnt"
  462. ;    incbin    "nice.fnt"
  463.  
  464. ; **************************************************************************
  465. ; *                MUSICA PROTRACKER               *
  466. ; **************************************************************************
  467.  
  468. mt_data:
  469.     incbin    "mod.purple-shades"
  470.  
  471.  
  472.     SECTION    MIOPLANE,BSS_C
  473.  
  474. BITPLANEGRIGLIA:
  475.     ds.b    80*256    ; un bitplane 640x256
  476.  
  477.  
  478.     ds.b    80*100
  479. BITPLANETESTO:
  480.     ds.b    80*256    ; un bitplane 640x256
  481.  
  482.  
  483.     end
  484.  
  485. Alle volte mettere insieme routines di poco effetto genera un bel risultato.
  486.  
  487.